<!DOCTYPE HTML>
<html>
<head>
<title>SplitPath | AutoHotkey v1</title>
<meta name="description" content="The SplitPath command separates a file name or URL into its name, directory, extension, and drive." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>SplitPath</h1>

<p>将文件名(路径) 或 URL 分解成它的名称, 目录, 扩展名和驱动器.</p>

<pre class="Syntax"><span class="func">SplitPath</span>, InputVar <span class="optional">, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive</span></pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>InputVar</dt>
  <dd>
    <p>包含要分解的文件名(路径) 或 URL 的输入变量的名称. 除非您希望将变量的内容用作名称, 否则不要将名称包含在百分号中</p>
    <p>注意, 此函数文件名路径仅支持反斜杠(\), URL 仅支持正斜杠(/).</p>
    <p><span class="ver">[v1.1.21+]</span>: 这个参数可以为 <a href="../Variables.htm#Expressions">表达式</a></code>, 但必须使用<a href="../Language.htm#-expression">百分号-空格前缀</a>, 例如 <code>% "red,green,blue"</code>.</p>
    <p>译者注, 表达式的例子:<br><code>SplitPath, % fileExist("z:\") ? "z:\tmp" : "c:\tmp", _fileName, _fileDir</code></p>
  </dd>

  <dt>OutFileName</dt>
  <dd><p>如果省略, 则不存储相应的值. 否则, 请指定用来保存不带路径的文件名的输出变量的名称. 包含文件的扩展名.</p></dd>

  <dt>OutDir</dt>
  <dd><p>如果省略, 则不存储相应的值. 否则, 请指定用来保存文件目录的输出变量的名称, 包含驱动器字母或共享名(如果有). 即使文件在驱动器的根目录中也不包含最后的反斜杠.</p></dd>

  <dt>OutExtension</dt>
  <dd><p>如果省略, 则不存储相应的值. 否则, 请指定用来保存文件扩展名(例如 TXT, DOC 或 EXE) 的输出变量的名称. 不包含句点.</p></dd>

  <dt>OutNameNoExt</dt>
  <dd><p>如果省略, 则不存储相应的值. 否则, 请指定用来保存不带路径, 句点和扩展名的文件名的输出变量的名称.</p></dd>

  <dt>OutDrive</dt>
  <dd><p>如果省略, 则不存储相应的值. 否则, 请指定用来保存文件的驱动器字母或共享名的输出变量的名称. 如果文件在本地或映射的驱动器中, 则此变量会被设为驱动器字母后跟着冒号(没有反斜杠). 如果文件在网络路径中(UNC), 则变量会被设为共享名, 例如 \\Workstation01</p></dd>

</dl>

<h2 id="Remarks">备注</h2>
<p>如果不需要相应的信息, 则可以省略相应的输出变量.</p>
<p>如果 <em>InputVar</em> 包含不带驱动器字母的文件名(即没有路径或只是相对路径), 则 <em>OutDrive</em> 会被赋值为空, 但其他变量会被设置正确. 同样地, 如果没有路径, 则 <em>OutDir</em> 会被赋值为空; 而如果有路径但没有文件名, 则 <em>OutFileName</em> 和 <em>OutNameNoExt</em> 都会被置空.</p>
<p>此命令不会检查文件系统中真实的文件和目录. 它只是简单地分析 <em>InputVar</em> 中的字符串.</p>
<p>文件名中的通配符(* 和 ?) 及其他非法字符被视为等同于合法字符, 除了冒号, 反斜杠和句点, 对它们处理时会根据它们在文件的驱动器字母, 目录和扩展名中的性质进行.</p>
<p><strong>对 URL 的支持:</strong> 如果 <em>InputVar</em> 包含一个冒号后跟两个斜杠, 如 <code>https://domain.com</code> 或 <code>ftp://domain.com</code>, 则 <em>OutDir</em> 会被设置为协议前缀加域名加目录(例如 https://domain.com/images) 而 <em>OutDrive</em> 被设置为协议前缀加域名(例如 https://domain.com). 其他所有变量会根据上面的定义对它们进行设置.</p>
<h2 id="Related">相关</h2>
<p><a href="LoopFile.htm#LoopFileExt">A_LoopFileExt</a>, <a href="StrSplit.htm">StrSplit()</a>, <a href="StringGetPos.htm">StringGetPos</a>, <a href="StringMid.htm">StringMid</a>, <a href="StringTrimLeft.htm">StringTrimLeft</a>, <a href="StringLeft.htm">StringLeft</a>, <a href="FileSelectFile.htm">FileSelectFile</a>, <a href="FileSelectFolder.htm">FileSelectFolder</a>, <a href="StringSplit.htm">StringSplit</a></p>
<h2 id="Examples">示例</h2>
<div class="ex" id="ExBasic">
<p><a class="ex_number" href="#ExBasic"></a> 演示不同的用法.</p>
<pre>FullFileName := "C:\My Documents\Address List.txt"
   
<em>; 只获取上面的单独的文件名:</em>
SplitPath, FullFileName, name

<em>; 只获取目录:</em>
SplitPath, FullFileName,, dir

<em>; 获取所有信息:</em>
SplitPath, FullFileName, name, dir, ext, name_no_ext, drive
   
<em>; 上面这行会对变量进行如下设置:
; name = Address List.txt
; dir = C:\My Documents
; ext = txt
; name_no_ext = Address List
; drive = C:</em></pre>
</div>

</body>
</html>